package com.example.itcacp.entity;


import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 内容实体类：通过contentType进行区分
 * */

@Data
@TableName("tc_content")
public class Content {
    @TableId(type = IdType.AUTO)
    private Long contentId;
    @JsonSerialize(using = ToStringSerializer.class)
    private Long userId;
    private String title;
    private String content;
    private ContentType contentType;  // 内容类型
    private String cover;
    private Long categoryId;
    private String tags;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)  // 自动填充创建时间
    private LocalDateTime created_at;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updated_at;
    /**
     *内容类型枚举
     */
    public enum ContentType {  // 目标内容类型枚举
        BOLG, QUESTION, ESSAY
    }
    /**
     * 分类；通过categoryId与内容分类建立联系
     * */
    @TableField(exist = false)
    private Category category; // 内容对应的分类
    /**
     * 每篇博客作者
     * */
    @TableField(exist = false)
    private User user;
    /**
     * 点赞量：通过点赞表获取数据
     * */
    @TableField(exist = false)
    private Long likes;
    /**
     * 收藏量：通过收藏表获取数据
     * */
    @TableField(exist = false)
    private Long collections;
    /**
     * 浏览量：通过每个用户的浏览历史表获取数，用户删除浏览历史记录时不级联删除文章的浏览量
     * */
    @TableField(exist = false)
    private Long views;
    /**
     * 浏览内容的用户点赞状态
     * */
    @TableField(exist = false)
    private boolean likeStates;
    /**
     * 浏览内容的用户收藏状态
     * */
    @TableField(exist = false)
    private boolean collectStates;
    /**
     * 评论内容列表
     * */
    @TableField(exist = false)
    private List<Comment> comment;
}
